syslogdによりシステムのログを管理できます。
多くのアプリケーションはsyslogdを利用してログを出力しています。
Linuxでは、主なログの出力先は/var/logディレクトリです。ディレクトリ内を確認すると分かりますが、ここには複数のファイルが存在します。この設定を行うファイルが/etc/syslog.confです。
syslog.confの書式は、スペースあるいはタブで分けられた2つのフィールド「selector」と「action」で構成されています。
selector・・・取得するログの指定
action・・・取得したログの出力先
を指定します。
書式: selector action
selectorは「facility」と「priority」(label)を「.」(ピリオド)で接続します。特定のactionに対して複数のselectorを指定したい場合は、「;」(セミコロン)で接続します。
書式: facility.priority[;facility.priority]
facilityはログの分類に当たるものです。syslogdを利用するプログラムは、「このログはこのfacilityに所属している」という情報をsyslogdに渡しています。syslogdの設定を行うことで、facilityに応じて扱い方を変更できます。
●facilityのオプションfacility | 対象のログ |
auth(security) | 認証サービスのメッセージ(現在はauthprivが推奨されている) |
authpriv | 認証サービス(カテゴリはauthと同じ。authとは出力結果が異なる) |
cron | cronのメッセージ |
daemon | デーモンのメッセージ |
kern | カーネルのメッセージ |
lpr | プリンタサービスのメッセージ |
メールサービスのメッセージ | |
news | ニュースサービスのメッセージ |
syslog | syslogのメッセージ |
user | ユーザープロセスのメッセージ |
uucp | uucp転送を行うプログラムのメッセージ |
local0~7 | アプリケーションに依存する |
複数のfacilityを指定したい場合は「,」(カンマ)で接続して
mail,ftp.warn |
priorityは、プログラムが出力するメッセージのうち、ログのレベルの重要度を設定します。
●priorityのオプションpriority | 内容 |
debug | デバッグ情報 |
info | 情報 |
notice | 通知 |
warn | 警告 |
err | 一般的なエラー |
crit | 致命的なエラー |
alert | 緊急に対処すべきエラー |
emerg | システムが落ちるような状態 |
通常の設定を行うと、指定したpriority以上のログが出力されます。例えば、「err」を指定すればcrit、alert、emergのレベルの出力もされます。すなわち、重要度の低いpriorityを選択すればするほど、出力されるメッセージは多くなります。逆に、指定したpriorityよりも重要度の低いメッセージのみを出力させたい場合は、
mail.*;mail.!warn |
のように記述します。この設定では、メールに関するメッセージのdebugとinfoとnoticeが出力されます(ここでの「*」はすべてのメッセージの意味)。 特定のpriorityのみを指定することも可能です。それには「=」を使用します。
kernel.=warn |
のように記述すると、カーネルの警告メッセージだけが出力されます。これに「!」を合わせることで、特定のpriorityを除いたメッセージを出力することも可能です。 これらのpriorityの指定以外に、「none」を利用するとそのfacirityの出力を行いません。
kernel.=warn <---facilityがkernelでpriorityがwarnのみ出力 mail.*;mail.!=crit <---facilityがmailでpriorityがcrit以外のメッセージを出力 .;daemon.none <---facilityがdaemon以外の全メッセージを出力 |
どのfacilityをどのpriorityにするかは、何を監視したいかによります。重要なデータを見逃さないように、必要なデータが取得できるpriorityに変更しましょう。
actionには、selectorで指定したメッセージをどこに、あるいはどのように出力するかを設定します。具体的には、
になります。また、出力先のファイルとして/dev/consoleを指定することで、コンソールに表示させることも可能です。actionの設定例は以下のとおりです。
/var/log/samplelog <---/var/log/samplelogへログを出力 | /usr/local/bin/*** <---ログをパイプでほかのプログラムへ渡す /dev/console <---ローカルのコンソールへ出力 @remotehost <---リモートホストのsyslogdへ送信 root,user1 <---rootとuser1に通知 * <---オンラインユーザーすべてに通知 |
サーバのログを確認すれば、不正アクセスやサーバの状態、サービスの動作などを監視することができます。
デフォルトでは、/var/logディレクトリにさまざまなログファイルがあります。代表的な情報がどのファイルに出力されるのかを確認し、何に関する情報が必要であるかに応じて特定の単語を抜き出すファイルを指定します。
●ログが出力されるファイルファイル名 | 内容 |
/var/log/messages | 一般的なシステムに関する情報 |
/var/log/secure | セキュリティに関する情報 |
/var/log/boot.log | OS起動時に関する情報 |
/var/log/cron | 定期的に実行される処理の結果に関する情報 |
/var/log/maillog | メールに関する情報 |
/var/log/spooler | 印刷やニュースに関する情報 |
syslogdの設定を行いましたが、そのまま特定のログファイルに永遠にログを書き込んでいくわけにはいきません。なぜなら、ログファイルのデータが多くなればディスク容量を圧迫しますし、ログを確認しようとすると時間やCPUへの負担が大きくなるからです。これを回避するために、「logrotate」というプログラムを利用します。logrotateは指定されたタイミングでログファイルのバックアップを取り、新しいログファイルを作成してログのローテーションを行います。
logrotateの設定は、/etc/logrotate.confと/etc/logrotate.d ディレクトリにある各設定ファイルで行います。
logrotate.confの内容は以下のとおりです。
weekly <---毎週ファイルの置き換えを行う(monthly、dailyも指定可) rotate 4 <---4世代分のファイルを保存 create <---ファイルの置き換え後、新しいログファイルを作成 #compress <---圧縮するかどうか(デフォルトは圧縮しない #でコメント) include /etc/logrotate.d <---各ログの詳細設定ファイルは/etc/logrotate.d /var/log/wtmp { <---wtmpログファイルは、毎月1世代のみファイルを置き換え、所有者がroot、 monthly 所有グループがutmpの新しいファイルを0664のパーミッションで作成する create 0664 root utmp rotate 1 } |
logrotate.confファイルは、logrotateのグローバルな設定を行います。例えば、1日のログのデータ量が非常に多い場合はweeklyではなくdailyに変更をすることで、1つのファイルのサイズを小さくできます。その場合、「rotate 4」では4日分しかログが残らないため、必要に応じて数字を大きくするなどの設定変更が必要です。
各ログファイルの設定は、/etc/logrotated.dディレクトリの設定ファイルで行います。syslogdで設定されたログの設定ファイルは、/etc/logrotated.d/syslog になります。
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron { <---最初の行にどのログファイルに関する設定かの記述 sharedscripts <---複数のログファイルのローテーション後に、下の行の処理を1度だけ実行 postrotate <---endscriptまでの処理をローテーション終了後に実行 /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null ' 2> /dev/null || true <---syslogdの動作中にファイルを移動すると、syslogdは出力すべきログファイルを見失ってしまうため、syslogdにHUPシグナルを送って設定を再読み込みさせている endscript <---コマンドの終了 } |
「グローバルの設定では毎週ローテーションだがsyslogdのログファイルのみ毎日」に変更したければ、この中括弧のpostrotateより上に「daily」と記述します。「missingok」と記述すると、対象のファイルが存在しなくてもエラーを出しません。「size 10M」と記述すると、ファイルサイズが10Mbytesを超えるローテーションを行うことも可能です。
logrotateはデーモンではなく、ここで設定した内容はcronによってlogrotateが起動されたときに読み込まれます。cronは/etc/crontabの内容に従い、/etc/cron.dailyディレクトリのsyslogを実行します。syslogファイルはlogrotateを起動するスクリプトになっており、設定ファイルに従って処理を行います。
www.it-shikaku.jp
[Top] | |
[講義目次] | |
[1.08:システム管理] | |
[1.09:重要なシステムサービス] | |
[1.09.1 システム時刻の管理] | |
[1.09.2 システムのログ] | |
[1.09.3 メール配送エージェント(MTA)の基本] | |
[1.10:セキュリティ] | |
[講義検索] | |
[リンク集] |